package com.JingYan.HuaWei;

/**
 * @program: JingYan
 * @ClassName: JKC003.java
 * @author: Dong
 * @version: 1.0.0
 * @Description: 华为机考C 查找子字符串
 * @createTime 2024年04月14日 21:41:00
 */
public class JKC003 {
    /**
     *  给定一个字符串，只包含字母和数字，按要求找出字符串中的最长（连续）子串的长度。字符串本身是其最长的子串。子串要求：
     *
     * 只包含1个字母（a~z, A~Z），其余必须是数字；
     * 字母可以在子串中的任意位置。
     * 如果找不到满足要求的子串，如全是字母或全是数字，则返回-1。
     */


    public static void main(String[] args) {
        String input = "a123b12345"; // 示例输入
        int maxLength = findLongestSubstringLength(input);
        System.out.println("最长满足条件的子串长度为: " + maxLength);
    }

    public static int findLongestSubstringLength(String s) {
        int maxLength = -1; // 如果没有找到满足条件的子串，返回-1
        int start = 0; // 滑动窗口的起始位置
        int letterIndex = -1; // 记录单个字母出现的位置

        for (int end = 0; end < s.length(); end++) {
            char c = s.charAt(end);

            // 如果当前字符是字母
            if (Character.isLetter(c)) {
                // 如果之前已经有字母了，移动窗口的起始位置到上一个字母的下一个位置
                if (letterIndex != -1) {
                    start = letterIndex + 1;
                }
                // 更新字母的位置
                letterIndex = end;
            }

            // 更新最长子串的长度
            maxLength = Math.max(maxLength, end - start + 1);
        }

        // 如果整个字符串都是数字，返回-1
        return letterIndex == -1 ? -1 : maxLength;
    }
}
